先日、旅botに三姉妹夜話というレポート書き込み機能を追加しました。
大雑把に説明すると「Mi,Mu,Meiの三姉妹が、それぞれの今日の旅を振り返って雑談する」というシチュエーションを書き込む というものです。
誠実に見てきたものを報告するだけでなく、なんかワチャワチャ感も欲しかったんですよ。
https://twitter.com/marble_walker/status/1722994204341940226
仕組み概要
文章の生成方法はいくつか案がありました。
当日の全員の停泊ログのサマリーを元に会話様の文章を生成するようにGPT4に指示する
個々のアバターそれぞれに会話のスレッドを持たせて、停泊ログのサマリーを与えて、「他の2人はこういう会話をしました。それに返答してください」というマルチターン会話のスレッドを3人分回す
両方見てみて、どっちがおもしろそうか と思ったら、2のほうが面白そうなので当然2を選びました。
となるとマルチターン会話が出来るChatGPT系を現状選択することになります(youriがマルチターンが出来そうなので動いてから対応できるか検討予定)
元々自前のツール(mi-Server/mi-front)のAI処理部は、API公開直後のChatGPTのAPIインタフェースを参考に作ってます。APIは複数回の会話履歴をまるごと送ったり戻したりしているので「合理的だけどワイルドだなー」とか思いました。でもこれは複数のAIアバターを持たせて別々の会話を切り替えるのは楽なので、そういう意図なのかなとそれぞれの会話群にスレッドidを持たせてまとめるくらいの仕組みは入れてました。
それを3スレッド分作って、会話結果を足しながら回すという形で作ってみました。
指示で与えているプロンプトがまだ単純なのでちょっとまだ会話が単調なのですが、そこは追々改良しようかと。単に夜話の生成だけに使うとも限らないですし。
なんでLangChainを使わないの
LangChainはこの手のLLMのシーケンス処理を統合的に処理するツールらしいです。
ビジネスで考えるなら多少時間がかかっても標準化されつつあるツールに追従したほうが有利でしょう。でも個人で楽しみながらゴシゴシ作っているものに学習時間をかけたとして、想定したものではなかったり理解が困難だったりして、何日もかけたのに作っていたものが何も改善されなかったら。
アウトプットが出なかったとき、気力を折れるということは多々あります。仕事だったらそりゃ本気で対策を考えて切り替えていきますが、報酬も得られず誰にも評価されない個人作業ならしばらく見たくもない状態になりますし、個人で殴り書きしたソースなんて一定期間見てなければ本人でも何を書いていたか分からなくなるものです。そういう黒歴史プロジェクトソースは山ほどNASに溜まってますし。
ビジネスでやっているものでもレッドオーシャン領域では何が出て風向きが変わるかわかったものではないです(自分の記憶ではOpenDocとかOSI7階層モデルとかSilverLightとか。。)
それだったら自分で理解出来る方法でやったほうが個人の趣味として納得ができます。
LangChainは十分分かりやすい入門書や分かりやすい実装例とかが出てからゆっくり移植を考えます(というか自分はpythonは苦手なんですよ。。仕事経験がない訳ではないのですが。。)